import Link from "next/link"; import { PopiartApiError, getSkillsCatalog, getViewerSession, } from "@/lib/popiart-api"; import { getLiveCopy } from "@/lib/live-copy"; import { type Locale } from "@/lib/site-content"; export const dynamic = "force-dynamic"; function formatError(error: unknown) { if (error instanceof PopiartApiError) { return error.message; } if (error instanceof Error) { return error.message; } return String(error); } export default async function SkillsPage({ params, searchParams, }: { params: Promise<{ locale: string }>; searchParams: Promise<{ search?: string | string[] }>; }) { const { locale } = await params; const rawSearch = (await searchParams).search; const search = Array.isArray(rawSearch) ? rawSearch[0] : rawSearch; const typedLocale = locale as Locale; const liveCopy = getLiveCopy(typedLocale); const session = await getViewerSession(); if (!session) { return (
{liveCopy.skills.tag}

{liveCopy.skills.title}

{liveCopy.skills.subtitle}

{liveCopy.skills.unauthenticatedTitle}

{liveCopy.skills.unauthenticatedBody}

{liveCopy.skills.loginCta} {liveCopy.skills.docsCta}
); } let catalog = null; let loadError: string | null = null; try { catalog = await getSkillsCatalog(search?.trim()); } catch (error) { loadError = formatError(error); } return (
{liveCopy.skills.tag}

{liveCopy.skills.title}

{liveCopy.skills.subtitle}

{loadError ? (
{liveCopy.skills.loadErrorPrefix} {loadError}
) : null}
{liveCopy.skills.resultsPrefix}: {catalog?.total ?? 0} {session.user.name || session.user.email || session.user.id}
{catalog && catalog.items.length > 0 ? ( catalog.items.map((skill) => (
{skill.version}

{skill.name}

{skill.description}

{liveCopy.skills.routeKey}
{skill.route_key || skill.id}
{liveCopy.skills.modelType}
{skill.model_type}
{liveCopy.skills.latency}
{skill.estimated_duration_s}s
{liveCopy.skills.tags}
{skill.tags.join(", ") || "-"}
)) ) : (

{liveCopy.skills.noResults}

{search ? `"${search}"` : liveCopy.skills.subtitle}

)}
); }